import 'package:get/get.dart';
import 'package:flutter/material.dart';
import '../../../models/device_model.dart';
import '../../../models/product_model.dart';
import '../../../repositories/device_repository.dart';
import '../../../services/device_service.dart';
import '../../../services/product_service.dart';
import '../../../services/theme_service.dart';
import 'package:intl/intl.dart';
import '../../../providers/device_provider.dart';

class DeviceDetailController extends GetxController {
  // 设备仓库和服务
  final DeviceRepository _deviceRepository = Get.find<DeviceRepository>();
  final DeviceService _deviceService = Get.find<DeviceService>();
  final ProductService _productService = Get.find<ProductService>();
  final ThemeService _themeService = Get.find<ThemeService>();

  // 设备ID
  final deviceId = 0.obs;

  // 设备数据
  final device = Rxn<Device>();

  // 设备名称（如果有直接传入的）
  final String? initialDeviceName = Get.arguments?['deviceName'];
  // 设备信息（如果有直接传入的）
  final Device? initialDeviceInfo = Get.arguments?['deviceInfo'];

  // 产品数据
  final product = Rx<Product?>(null);

  // 加载状态
  final isLoading = true.obs;
  final errorMessage = RxnString();

  // 用于格式化日期
  final DateFormat dateFormat = DateFormat('yyyy-MM-dd HH:mm:ss');

  // 添加公共访问点
  final DeviceProvider deviceProvider = DeviceProvider();

  // 添加用于图片管理的控制变量
  final deviceImageUrl = "".obs;

  @override
  void onInit() {
    super.onInit();
    
    // 从路由参数获取设备ID
    final args = Get.arguments;
    if (args is Map<String, dynamic> && args.containsKey('deviceId')) {
      deviceId.value = args['deviceId'];
      loadDeviceDetail();
    } else {
      errorMessage.value = '设备ID无效，请返回设备列表页面';
      isLoading.value = false;
    }
  }

  // 加载设备详情
  Future<void> loadDeviceDetail() async {
    try {
      isLoading.value = true;
      errorMessage.value = null;
      
      if (deviceId.value <= 0) {
        errorMessage.value = '设备ID无效';
        isLoading.value = false;
        return;
      }
      
      final response = await _deviceRepository.getDeviceDetail(deviceId.value);
      
      if (response.isSuccess && response.data != null) {
        device.value = response.data;
        
        // 更新设备图片URL并确认
        deviceImageUrl.value = response.data!.deviceImage;
        
        // 调试信息 - 打印响应数据和图片URL
        print('设备详情API响应: ID=${response.data!.deviceId}, 名称=${response.data!.deviceName}');
        print('加载设备详情成功: ${device.value?.deviceName}');
        print('设备图片URL (直接从API): ${response.data!.deviceImage}');
        print('设备图片URL (控制器变量): ${deviceImageUrl.value}');
        
        // 如果有产品ID，加载产品详情
        if (response.data!.productId != null && response.data!.productId! > 0) {
          await loadProductDetail(response.data!.productId!);
        }
      } else {
        errorMessage.value = response.msg;
      }
    } catch (e) {
      errorMessage.value = '加载设备详情失败：$e';
    } finally {
      isLoading.value = false;
    }
  }

  // 加载产品详情
  Future<void> loadProductDetail(int productId) async {
    try {
      // 从缓存或服务器获取产品详情
      final productDetail = await _productService.getProductById(productId);
      if (productDetail != null) {
        product.value = productDetail;
      }
    } catch (e) {
      debugPrint('获取产品详情失败: $e');
    }
  }

  // 刷新设备数据
  Future<void> refreshDeviceDetail() async {
    await loadDeviceDetail();
  }

  // 获取设备状态对应的颜色
  Color getStatusColor(int status) {
    switch (status) {
      case 0: // 未激活
        return _themeService.getThemedColor(
          lightColor: Colors.grey,
          darkColor: Colors.grey.shade400,
        );
      case 1: // 在线
        return _themeService.getThemedColor(
          lightColor: Colors.green,
          darkColor: Colors.green.shade400,
        );
      case 2: // 离线
        return _themeService.getThemedColor(
          lightColor: Colors.red,
          darkColor: Colors.red.shade400,
        );
      case 3: // 禁用
        return _themeService.getThemedColor(
          lightColor: Colors.orange,
          darkColor: Colors.orange.shade300,
        );
      default:
        return _themeService.getThemedColor(
          lightColor: Colors.grey,
          darkColor: Colors.grey.shade400,
        );
    }
  }

  // 获取节点类型描述
  String getNodeTypeDesc(int? nodeType) {
    switch (nodeType) {
      case 1:
        return '直连设备';
      case 2:
        return '网关设备';
      case 3:
        return '子设备';
      default:
        return '未知';
    }
  }

  // 获取协议类型描述
  String getProtocolTypeDesc(String? protocolType) {
    switch (protocolType) {
      case 'mqtt':
        return 'MQTT';
      case 'coap':
        return 'CoAP';
      case 'modbus':
        return 'Modbus';
      case 'http':
        return 'HTTP';
      default:
        return protocolType ?? '未知';
    }
  }

  // 获取认证方式描述
  String getAuthTypeDesc(int? authType) {
    switch (authType) {
      case 1:
        return '设备密钥';
      case 2:
        return '证书认证';
      case 3:
        return '设备ID认证';
      default:
        return '未知';
    }
  }

  // 获取数据格式描述
  String getDataFormatDesc(int? dataFormat) {
    switch (dataFormat) {
      case 1:
        return 'JSON';
      case 2:
        return '二进制';
      case 3:
        return '自定义';
      default:
        return '未知';
    }
  }

  // 格式化日期时间
  String formatDateTime(String? dateTime) {
    if (dateTime == null || dateTime.isEmpty) {
      return '未知';
    }

    try {
      final dt = DateTime.parse(dateTime);
      return dateFormat.format(dt);
    } catch (e) {
      return dateTime;
    }
  }

  // 添加上传设备图片的方法
  Future<void> uploadDeviceImage(String imagePath) async {
    try {
      // 确保有有效的设备ID
      if (deviceId.value <= 0 || device.value == null) {
        throw Exception('无效的设备ID');
      }
      
      print('准备上传图片: $imagePath');
      
      // 调用API上传图片
      final String uploadedImageUrl = await deviceProvider.uploadDeviceImage(
        deviceId.value, 
        imagePath
      );
      
      // 更新设备图片URL
      deviceImageUrl.value = uploadedImageUrl;
      
      // 提示用户上传成功
      Get.snackbar(
        '上传成功',
        '设备图片已更新',
        snackPosition: SnackPosition.BOTTOM,
        backgroundColor: Colors.green,
        colorText: Colors.white,
      );
      
      // 重新加载设备详情
      await loadDeviceDetail();
    } catch (e) {
      print('上传设备图片失败: $e');
      Get.snackbar(
        '上传失败',
        '上传设备图片失败: $e',
        snackPosition: SnackPosition.BOTTOM,
        backgroundColor: Colors.red,
        colorText: Colors.white,
      );
    }
  }
}
